package games.gong.durid.security;

/**
 * @ClassName JwtUtil
 * @PackageName games.gong.durid.security
 * @projectName springboot
 * @Description JWT工具类，用于生成和解析JWT令牌
 * @Author games
 * @Date 2025/8/19 下午4:28
 * @Version 1.0
 */

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import org.springframework.stereotype.Component;

import java.security.Key;
import java.util.Date;

@Component
public class JwtUtil {
    // 生成用于JWT签名的密钥
    private final Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
    // 设置JWT令牌的过期时间，1天
    private final long expiration = 1000 * 60 * 60 * 24; // 1天

    /**
     * 生成JWT令牌
     * @param userId 用户ID，作为自定义声明添加到令牌中
     * @param username 用户名，作为令牌的主题
     * @return 生成的JWT令牌字符串
     */
    public String generateToken(Long userId, String username) {
        return Jwts.builder()
                .setSubject(username)
                .claim("id", userId)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expiration))
                .signWith(key)
                .compact();
    }

    /**
     * 解析JWT令牌
     * @param token 待解析的JWT令牌字符串
     * @return 包含令牌声明信息的Jws对象
     */
    public Jws<Claims> parseToken(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(key)
                .build()
                .parseClaimsJws(token);
    }
}
